+Tue Sep 18 12:12:43 2001 Jonathan Blandford <jrb@redhat.com>
+
+ * gtk/gtktreeview.c (gtk_tree_view_put): Add put for use with
+ editable widgets. This function is private, and should only be
+ used by GtkTreeView.
+
2001-09-18 Matt Wilson <msw@redhat.com>
* docs/Makefile.am (EXTRA_DIST): don't use += before =
+Tue Sep 18 12:12:43 2001 Jonathan Blandford <jrb@redhat.com>
+
+ * gtk/gtktreeview.c (gtk_tree_view_put): Add put for use with
+ editable widgets. This function is private, and should only be
+ used by GtkTreeView.
+
2001-09-18 Matt Wilson <msw@redhat.com>
* docs/Makefile.am (EXTRA_DIST): don't use += before =
+Tue Sep 18 12:12:43 2001 Jonathan Blandford <jrb@redhat.com>
+
+ * gtk/gtktreeview.c (gtk_tree_view_put): Add put for use with
+ editable widgets. This function is private, and should only be
+ used by GtkTreeView.
+
2001-09-18 Matt Wilson <msw@redhat.com>
* docs/Makefile.am (EXTRA_DIST): don't use += before =
+Tue Sep 18 12:12:43 2001 Jonathan Blandford <jrb@redhat.com>
+
+ * gtk/gtktreeview.c (gtk_tree_view_put): Add put for use with
+ editable widgets. This function is private, and should only be
+ used by GtkTreeView.
+
2001-09-18 Matt Wilson <msw@redhat.com>
* docs/Makefile.am (EXTRA_DIST): don't use += before =
+Tue Sep 18 12:12:43 2001 Jonathan Blandford <jrb@redhat.com>
+
+ * gtk/gtktreeview.c (gtk_tree_view_put): Add put for use with
+ editable widgets. This function is private, and should only be
+ used by GtkTreeView.
+
2001-09-18 Matt Wilson <msw@redhat.com>
* docs/Makefile.am (EXTRA_DIST): don't use += before =
+Tue Sep 18 12:12:43 2001 Jonathan Blandford <jrb@redhat.com>
+
+ * gtk/gtktreeview.c (gtk_tree_view_put): Add put for use with
+ editable widgets. This function is private, and should only be
+ used by GtkTreeView.
+
2001-09-18 Matt Wilson <msw@redhat.com>
* docs/Makefile.am (EXTRA_DIST): don't use += before =
+Tue Sep 18 12:12:43 2001 Jonathan Blandford <jrb@redhat.com>
+
+ * gtk/gtktreeview.c (gtk_tree_view_put): Add put for use with
+ editable widgets. This function is private, and should only be
+ used by GtkTreeView.
+
2001-09-18 Matt Wilson <msw@redhat.com>
* docs/Makefile.am (EXTRA_DIST): don't use += before =
GtkTreePath *path,
GtkTreeIter *iter)
{
- gint i;
g_return_if_fail (GTK_IS_TREE_MODEL (tree_model));
g_return_if_fail (path != NULL);
g_return_if_fail (iter != NULL);
gint width);
void _gtk_tree_view_column_start_drag (GtkTreeView *tree_view,
GtkTreeViewColumn *column);
+gboolean _gtk_tree_view_column_cell_event (GtkTreeViewColumn *tree_column,
+ GtkCellEditable **editable_widget,
+ GdkEvent *event,
+ gchar *path_string,
+ GdkRectangle *background_area,
+ GdkRectangle *cell_area,
+ guint flags);
GtkTreeSelection* _gtk_tree_selection_new (void);
GtkTreeSelection* _gtk_tree_selection_new_with_tree_view (GtkTreeView *tree_view);
GtkWidget *widget;
gint x;
gint y;
+ gint width;
+ gint height;
};
GtkTreeView *tree_view);
static void gtk_tree_view_interactive_search (GtkTreeView *tree_view,
GdkEventKey *key);
-
+static void gtk_tree_view_put (GtkTreeView *tree_view,
+ GtkWidget *child_widget,
+ gint x,
+ gint y,
+ gint width,
+ gint height);
+
static GtkContainerClass *parent_class = NULL;
static guint tree_view_signals[LAST_SIGNAL] = { 0 };
while (tmp_list)
{
GtkAllocation allocation;
- GtkRequisition requisition;
GtkTreeViewChild *child = tmp_list->data;
tmp_list = tmp_list->next;
+ /* totally ignore our childs allocation <-: */
allocation.x = child->x;
allocation.y = child->y;
- gtk_widget_get_child_requisition (child->widget, &requisition);
- allocation.width = requisition.width;
- allocation.height = requisition.height;
+ allocation.width = child->width;
+ allocation.height = child->height;
gtk_widget_size_allocate (child->widget, &allocation);
}
for (list = tree_view->priv->columns; list; list = list->next)
{
GtkTreeIter iter;
+ GtkCellEditable *cell_editable = NULL;
column = list->data;
path_string = gtk_tree_path_to_string (path);
- if (gtk_tree_view_column_cell_event (column,
- (GdkEvent *)event,
- path_string,
- &background_area,
- &cell_area, 0))
+ if (_gtk_tree_view_column_cell_event (column,
+ &cell_editable,
+ (GdkEvent *)event,
+ path_string,
+ &background_area,
+ &cell_area, 0))
{
+ if (cell_editable != NULL)
+ {
+ gtk_tree_view_put (tree_view,
+ GTK_WIDGET (cell_editable),
+ cell_area.x, cell_area.y, cell_area.width, cell_area.height);
+ gtk_cell_editable_start_editing (cell_editable,
+ (GdkEvent *)event);
+ }
g_free (path_string);
gtk_tree_path_free (path);
return TRUE;
}
}
+static void
+gtk_tree_view_put (GtkTreeView *tree_view,
+ GtkWidget *child_widget,
+ gint x,
+ gint y,
+ gint width,
+ gint height)
+{
+ GtkTreeViewChild *child;
+
+ g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
+ g_return_if_fail (GTK_IS_WIDGET (child_widget));
+
+ child = g_new (GtkTreeViewChild, 1);
+
+ child->widget = child_widget;
+ child->x = x;
+ child->y = y;
+ child->width = width;
+ child->height = height;
+
+ tree_view->priv->children = g_list_append (tree_view->priv->children, child);
+
+ if (GTK_WIDGET_REALIZED (tree_view))
+ gtk_widget_set_parent_window (child->widget, tree_view->priv->bin_window);
+
+ gtk_widget_set_parent (child_widget, GTK_WIDGET (tree_view));
+}
+
+
/* TreeModel Callbacks
*/
selected_iter);
}
}
+
}
}
-/**
- * gtk_tree_view_column_cell_event:
- * @tree_column: A #GtkTreeViewColumn.
- * @event: a #GdkEvent
- * @path_string: widget-dependent string representation of the event location; e.g. for #GtkTreeView, a string representation of #GtkTreePath
- * @background_area: background area as passed to gtk_cell_renderer_render()
- * @cell_area: cell area as passed to gtk_cell_renderer_render()
- * @flags: render flags
- *
- * Handles an event. This is used primarily by the GtkTreeView.
- *
- * Return value: %TRUE if the event was consumed/handled
- **/
gboolean
-gtk_tree_view_column_cell_event (GtkTreeViewColumn *tree_column,
- GdkEvent *event,
- gchar *path_string,
- GdkRectangle *background_area,
- GdkRectangle *cell_area,
- guint flags)
+_gtk_tree_view_column_cell_event (GtkTreeViewColumn *tree_column,
+ GtkCellEditable **editable_widget,
+ GdkEvent *event,
+ gchar *path_string,
+ GdkRectangle *background_area,
+ GdkRectangle *cell_area,
+ guint flags)
{
- gboolean visible, can_activate;
+ gboolean visible, can_activate, can_edit;
g_return_val_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column), FALSE);
g_object_get (G_OBJECT (((GtkTreeViewColumnCellInfo *) tree_column->cell_list->data)->cell),
"visible", &visible,
"can_activate", &can_activate,
+ "can_edit", &can_edit,
NULL);
if (visible && can_activate)
{
cell_area,
flags))
return TRUE;
-
+ }
+ else if (visible && can_edit)
+ {
+ *editable_widget = gtk_cell_renderer_start_editing (((GtkTreeViewColumnCellInfo *) tree_column->cell_list->data)->cell,
+ event,
+ tree_column->tree_view,
+ path_string,
+ background_area,
+ cell_area,
+ flags);
+ return (*editable_widget != NULL);
}
return FALSE;
}